home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / enigma / earcd / utility / utilfile / xpksourc.lha / xpk_Source / XFH / dossupport.c < prev    next >
C/C++ Source or Header  |  1996-10-19  |  1KB  |  73 lines

  1. #include <exec/types.h>
  2. #include <exec/memory.h>
  3. #include <dos/dos.h>
  4. #include <pragma/exec_lib.h>
  5.  
  6. #include "dossupport.h"
  7. #include <string.h>
  8.  
  9. void *dosalloc(LONG size)
  10. {
  11.    register LONG *mem;
  12.  
  13.    if(mem = AllocMem(size += 4, MEMF_PUBLIC|MEMF_CLEAR))
  14.      *mem++ = size;
  15.  
  16.    return mem;
  17. }
  18.  
  19. void dosfree(void *mem)
  20. {
  21.    if(mem)
  22.    {
  23.       mem = (ULONG *)mem - 1;
  24.       FreeMem(mem, *(ULONG *)mem);
  25.    }
  26. }
  27.  
  28. BSTR cstr2b(STRPTR cstr, STRPTR buf)
  29. {
  30.   register UBYTE len;
  31.    
  32.   *buf = len = strlen(cstr);
  33.   strncpy(buf+1,cstr,len);
  34.   return (BSTR) ((ULONG)buf >> 2);
  35. }
  36.  
  37. STRPTR bstr2c(BSTR bstr, STRPTR buf)
  38. {
  39.    register UBYTE len;
  40.    register STRPTR p;
  41.    
  42.    p = (STRPTR)(bstr << 2);
  43.    len = *p++;
  44.    strncpy(buf, p, len);
  45.    buf[len] = '\0';
  46.    return (STRPTR) buf;
  47. }
  48.  
  49. STRPTR bstr2cinplace(STRPTR pp)
  50. {
  51.    register UBYTE len;
  52.    register STRPTR p = pp;
  53.    
  54.    for(len = *p; len--; p++)
  55.      p[0] = p[1];
  56.    *p = '\0';
  57.    return (STRPTR) pp;
  58. }
  59.  
  60. BSTR cstr2binplace(STRPTR pp)
  61. {
  62.    register UBYTE len;
  63.    register STRPTR p = pp;
  64.    
  65.    len = strlen(p);
  66.    for(p = pp+len; p != pp; --p)
  67.      *p = *(p-1);
  68.    *pp=len;
  69.  
  70.    return (BSTR)((ULONG)pp >> 2);
  71. }
  72.  
  73.